<?php
// +----------------------------------------------------------------------
// | Scallion 
// +----------------------------------------------------------------------
// | Copyright (c) 2018 http://www.scallion.top All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Liuxg < 420695648@qq.com>
// +----------------------------------------------------------------------
namespace app\admin\controller;

use app\admin\model\RouteModel;
use cmf\controller\AdminBaseController;
use app\admin\model\SchoolCategoryModel;
use think\Db;
use app\admin\model\ThemeModel;


class SchoolCategoryController extends AdminBaseController
{
    /**
     * 分类列表
     * @adminMenu(
     *     'name'   => '分类管理',
     *     'parent' => 'admin/AdminIndex/default',
     *     'display'=> true,
     *     'hasView'=> true,
     *     'order'  => 10000,
     *     'icon'   => '',
     *     'remark' => '分类列表',
     *     'param'  => ''
     * )
     */
    public function index()
    {
        $schoolCategoryModel = new SchoolCategoryModel();
        $categoryTree        = $schoolCategoryModel->adminCategoryTableTree();

        $this->assign('category_tree', $categoryTree);
        return $this->fetch();
    }

    /**
     * 添加分类
     * @adminMenu(
     *     'name'   => '添加分类',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> true,
     *     'order'  => 10000,
     *     'icon'   => '',
     *     'remark' => '添加分类',
     *     'param'  => ''
     * )
     */
    public function add()
    {
        $parentId            = $this->request->param('parent', 0, 'intval');
        $SchoolCategoryModel = new SchoolCategoryModel();
        $categoriesTree      = $SchoolCategoryModel->adminCategoryTree($parentId);

        $this->assign('categories_tree', $categoriesTree);
        return $this->fetch();
    }

    /**
     * 添加分类提交
     * @adminMenu(
     *     'name'   => '添加分类提交',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 10000,
     *     'icon'   => '',
     *     'remark' => '添加分类提交',
     *     'param'  => ''
     * )
     */
    public function addPost()
    {
        $adminCategoryModel = new SchoolCategoryModel();

        $data = $this->request->param();

        $result = $this->validate($data, 'SchoolCategory');

        if ($result !== true) {
            $this->error($result);
        }

        $result = $adminCategoryModel->addCategory($data);

        if ($result === false) {
            $this->error('添加失败!');
        }

        $this->success('添加成功!', url('SchoolCategory/index'));

    }

    /**
     * 编辑分类
     * @adminMenu(
     *     'name'   => '编辑分类',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> true,
     *     'order'  => 10000,
     *     'icon'   => '',
     *     'remark' => '编辑分类',
     *     'param'  => ''
     * )
     */
    public function edit()
    {
        $id = $this->request->param('id', 0, 'intval');
        if ($id > 0) {
            $category = SchoolCategoryModel::get($id)->toArray();

            $adminCategoryModel = new SchoolCategoryModel();
            $categoriesTree      = $adminCategoryModel->adminCategoryTree($category['parent_id'], $id);

            $themeModel        = new ThemeModel();
            $listThemeFiles    = $themeModel->getActionThemeFiles('admin/List/index');
            $articleThemeFiles = $themeModel->getActionThemeFiles('admin/Article/index');

            $routeModel = new RouteModel();
            $alias      = $routeModel->getUrl('admin/List/index', ['id' => $id]);

            $category['alias'] = $alias;
            $this->assign($category);
            $this->assign('list_theme_files', $listThemeFiles);
            $this->assign('article_theme_files', $articleThemeFiles);
            $this->assign('categories_tree', $categoriesTree);
            return $this->fetch();
        } else {
            $this->error('操作错误!');
        }

    }

    /**
     * 编辑分类提交
     * @adminMenu(
     *     'name'   => '编辑分类提交',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 10000,
     *     'icon'   => '',
     *     'remark' => '编辑分类提交',
     *     'param'  => ''
     * )
     */
    public function editPost()
    {
        $data = $this->request->param();

        $result = $this->validate($data, 'SchoolCategory');

        if ($result !== true) {
            $this->error($result);
        }

        $adminCategoryModel = new SchoolCategoryModel();

        $result = $adminCategoryModel->editCategory($data);

        if ($result === false) {
            $this->error('保存失败!');
        }

        $this->success('保存成功!');
    }

    /**
     * 分类选择对话框
     * @adminMenu(
     *     'name'   => '分类选择对话框',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> true,
     *     'order'  => 10000,
     *     'icon'   => '',
     *     'remark' => '分类选择对话框',
     *     'param'  => ''
     * )
     */
    public function select()
    {
        $ids                 = $this->request->param('ids');
        $selectedIds         = explode(',', $ids);
        $adminCategoryModel = new SchoolCategoryModel();

        $tpl = <<<tpl
<tr class='data-item-tr'>
    <td>
        <input type='checkbox' class='js-check' data-yid='js-check-y' data-xid='js-check-x' name='ids[]'
               value='\$id' data-name='\$name' \$checked>
    </td>
    <td>\$id</td>
    <td>\$spacer <a href='\$url' target='_blank'>\$name</a></td>
</tr>
tpl;

        $categoryTree = $adminCategoryModel->adminCategoryTableTree($selectedIds, $tpl);

        $categories = $adminCategoryModel->select();

        $this->assign('categories', $categories);
        $this->assign('selectedIds', $selectedIds);
        $this->assign('categories_tree', $categoryTree);
        return $this->fetch();
    }

    /**
     * 分类排序
     * @adminMenu(
     *     'name'   => '分类排序',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 10000,
     *     'icon'   => '',
     *     'remark' => '分类排序',
     *     'param'  => ''
     * )
     */
    public function listOrder()
    {
        parent::listOrders(Db::name('School_category'));
        $this->success("排序更新成功！", '');
    }

    /**
     * 删除分类
     * @adminMenu(
     *     'name'   => '删除分类',
     *     'parent' => 'index',
     *     'display'=> false,
     *     'hasView'=> false,
     *     'order'  => 10000,
     *     'icon'   => '',
     *     'remark' => '删除分类',
     *     'param'  => ''
     * )
     */
    public function delete()
    {
        $adminCategoryModel = new SchoolCategoryModel();
        $id                  = $this->request->param('id');
        //获取删除的内容
        $findCategory = $adminCategoryModel->where('id', $id)->find();

        if (empty($findCategory)) {
            $this->error('分类不存在!');
        }
//判断此分类有无子分类（不算被删除的子分类）
        $categoryChildrenCount = $adminCategoryModel->where(['parent_id' => $id])->count();

        if ($categoryChildrenCount > 0) {
            $this->error('此分类有子类无法删除!');
        }

        $categoryPostCount = Db::name('School_category_post')->where('category_id', $id)->count();

        if ($categoryPostCount > 0) {
            $this->error('此分类有班级无法删除!');
        }

    }
}
